<?php

/**
 * IDIP 查询接口
 * Date: 2018/11/21
 */

namespace Lib\Paas;

use Lib\Base\Common;

class IDIP extends Base
{
    public function __construct($sData = [])
    {
        parent::__construct($sData);
    }

    /**
     * 获取IDIP数据
     *
     * @param array $cmdParams 【必填】IDIP相关指令需要的参数数组（参数名和参数值组成的一维数组）
     * @param string $decode【选填】 是否对返回结果进行urldecode操作，true-是，false-否
     * @return array
     * [
     *      'result' => '=0 请求成功，!=0 请求失败'
     *      ...
     * ]
     */
    public function getData($cmdParams, $decode = true)
    {
        $url = $this->getPaasRequestUrl('gameattr.sidip');

        $res = $this->http->post($url, Common::arr2QueryString($cmdParams));
        recordLog('idip接口返回数据：' . var_export($res, true), __FILE__, __LINE__);
        if ($res['ret'] != 0) {
            $this->tglogReport('框架请求ULink-Paas出现异常，curl_errno：' . $res['ret'] . '，curl_error：' . $res['msg'], 'gameattr.sidip');
            return ['result' => CURL_ERROR_NO, 'error_no' => $res['ret'], 'error_info' => '系统繁忙，请稍后再试！'];
        }

        $res = $res['data']; //paas接口返回的数据

        //error
        if ($res['ret'] != 0) {
            return ['result' => $res['ret'], 'error_no' => $res['errNo'], 'error_info' => '系统繁忙，请稍后再试！'];
        }

        //解析返回结果，如果结果中包含有|间隔的值，会按照|解析到数组，如果结果中包含按照空格间隔的值，会按照空格解析到数组
        //result=0&role_list=1|1234 123 1 123 123 123 1 123 123 123 123 123 1 1 1 12345612 3213 121345664 1 1 0 100 0 0 0 0 |
        //解析结果：$result['result'] = 0;
        //          $result[role_list][0] = 1;
        //          $result[role_list][1] = ['1234','123','1','123','123','123','1','123','123','123','123','123','1','1','1','12345612','3213','121345664','1','1','0','100','0','0','0','0');
        $result = [];
        $fields = explode('&', $res['data']);
        $loop = count($fields);
        for ($i = 0; $i < $loop; $i++) {
            $kv = explode('=', $fields[$i]);
            if (count($kv) > 1) {
                if (in_array($kv[0], ['_idip_req_id_', '_idip_msg_id_'])) {
                    continue;
                }
                if (strpos($kv[1], '|') !== false) {
                    $lists = explode('|', $kv[1]);
                    foreach ($lists as $index => $iteamList) {
                        if (!empty($iteamList)) {
                            if (strpos($iteamList, ' ') !== false) {
                                $iteams = explode(' ', $iteamList);
                                $result[$kv[0]][$index] = $iteams;
                            } else {
                                $result[$kv[0]][$index] = $iteamList;
                            }
                        }
                    }
                } else {
                    $result[$kv[0]] = $kv[1];
                }
            }
        }
        if ($decode) {
            $result = Common::urlDecodeDeep($result);
        }
        return $result;
    }

    /**
     * 获取IDIP数据(没有经过解析的数据)
     *
     * @param array $cmdParams 【必填】IDIP相关指令需要的参数数组（参数名和参数值组成的一维数组）
     * @return array
     * [
     *      'iRet' => '0-接口调用成功，其他-接口调用失败',
     *      'sMsg' => '错误信息',
     *      'data' => 'IDIP响应结果字符串',
     * ]
     * 注意：判断IDIP结果是否正确需要根据data中的IDIP请求结果字符串中的result的值来判断。
     */
    public function getOriginData($cmdParams)
    {
        $url = $this->getPaasRequestUrl('gameattr.sidip');

        $res = $this->http->post($url, Common::arr2QueryString($cmdParams));
        recordLog('idip接口返回数据：' . var_export($res, true), __FILE__, __LINE__);
        if ($res['ret'] != 0) {
            $this->tglogReport('框架请求ULink-Paas出现异常，curl_errno：' . $res['ret'] . '，curl_error：' . $res['msg'], 'gameattr.sidip');
            return ['iRet' => CURL_ERROR_NO, 'sMsg' => '系统繁忙，请稍后再试！','data'=>''];
        }
        $res = $res['data']; //paas接口返回的数据

        //error
        if ($res['ret'] != 0) {
            return ['iRet' => $res['ret'], 'sMsg' => '系统繁忙，请稍后再试！','data'=>''];
        }
        return ['iRet' => 0, 'sMsg' => 'success','data'=>$res['data']];
    }
}
